/'** \file
 * \brief Keyboard Keys definitions.
 *
 * See Copyright Notice in "iup.bi"
 *'/

#ifndef __iupkey_bi__
#define __iupkey_bi__

/'* from 32 to 126, all character sets are equal,
   the key code i the same as the character code. *'/

#define K_SP asc(" ")
#define K_exclam asc("!")
#define K_quotedbl asc(""")
#define K_numbersign asc("#")
#define K_dollar asc("$")
#define K_percent asc("%")
#define K_ampersand asc("&")
#define K_apostrophe asc("'")
#define K_parentleft asc("(")
#define K_parentright asc(")")
#define K_asterisk asc("*")
#define K_plus asc("+")
#define K_comma asc(",")
#define K_minus asc("-")
#define K_period asc(".")
#define K_slash asc("/")
#define K_0 asc("0")
#define K_1 asc("1")
#define K_2 asc("2")
#define K_3 asc("3")
#define K_4 asc("4")
#define K_5 asc("5")
#define K_6 asc("6")
#define K_7 asc("7")
#define K_8 asc("8")
#define K_9 asc("9")
#define K_colon asc(":")
#define K_semicolon asc(";")
#define K_less asc("<")
#define K_equal asc("=")
#define K_greater asc(">")
#define K_question asc("?")
#define K_at asc("@")
#define K_A asc("A")
#define K_B asc("B")
#define K_C asc("C")
#define K_D asc("D")
#define K_E asc("E")
#define K_F asc("F")
#define K_G asc("G")
#define K_H asc("H")
#define K_I asc("I")
#define K_J asc("J")
#define K_K asc("K")
#define K_L asc("L")
#define K_M asc("M")
#define K_N asc("N")
#define K_O asc("O")
#define K_P asc("P")
#define K_Q asc("Q")
#define K_R asc("R")
#define K_S asc("S")
#define K_T asc("T")
#define K_U asc("U")
#define K_V asc("V")
#define K_W asc("W")
#define K_X asc("X")
#define K_Y asc("Y")
#define K_Z asc("Z")
#define K_bracketleft asc("[")
#define K_backslash asc("\")
#define K_bracketright asc("]")
#define K_circum asc("^")
#define K_underscore asc("_")
#define K_grave asc("`")
#define K_a asc("a")
#define K_b asc("b")
#define K_c asc("c")
#define K_d asc("d")
#define K_e asc("e")
#define K_f asc("f")
#define K_g asc("g")
#define K_h asc("h")
#define K_i asc("i")
#define K_j asc("j")
#define K_k asc("k")
#define K_l asc("l")
#define K_m asc("m")
#define K_n asc("n")
#define K_o asc("o")
#define K_p asc("p")
#define K_q asc("q")
#define K_r asc("r")
#define K_s asc("s")
#define K_t asc("t")
#define K_u asc("u")
#define K_v asc("v")
#define K_w asc("w")
#define K_x asc("x")
#define K_y asc("y")
#define K_z asc("z")
#define K_braceleft asc("{")
#define K_bar asc("|")
#define K_braceright asc("}")
#define K_tilde asc("~")

#define iup_isprint(_c) ((_c) > 31 andalso (_c) < 127)

'/* also define the escape sequences that have keys associated */

#define K_BS 8
#define K_TAB 9
#define K_LF asc(!"\n")
#define K_CR asc(!"\r")

'/* backward compatible definitions */
#define K_quoteleft asc("`")
#define K_quoteright asc("'")
#define  isxkey        iup_isXkey

/'* IUP Extended Key Codes, range start at 128 */
/* Modifiers use 256 interval                 */
/* These key code definitions are specific to IUP  *'/

#define iup_isXkey(_c)      ((_c) > 128)
#define iup_isShiftXkey(_c) (((_c) > 256) andalso ((_c) < 512))
#define iup_isCtrlXkey(_c)  (((_c) > 512) andalso ((_c) < 768))
#define iup_isAltXkey(_c)   (((_c) > 768) andalso ((_c) < 1024))
#define iup_isSysXkey(_c)  (((_c) > 1024) andalso ((_c) < 1280))

#define IUPxCODE(_c)   ((_c) + 128)   '/* Normal (must be above 128) */
#define IUPsxCODE(_c)  ((_c) + 256)   '/* Shift (must have range to include the standard keys and the normal extended keys, so must be above 256 */
#define IUPcxCODE(_c)  ((_c) + 512)   '/* Ctrl   */
#define IUPmxCODE(_c)  ((_c) + 768)   '/* Alt    */
#define IUPyxCODE(_c)  ((_c) + 1024)  '/* Sys (Win or Apple) */

#define IUP_NUMMAXCODES 1280

#define K_HOME ((1) +128)
#define K_UP ((2) +128)
#define K_PGUP ((3) +128)
#define K_LEFT ((4) +128)
#define K_MIDDLE ((5) +128)
#define K_RIGHT ((6) +128)
#define K_END ((7) +128)
#define K_DOWN ((8) +128)
#define K_PGDN ((9) +128)
#define K_INS ((10) +128)
#define K_DEL ((11) +128)
#define K_PAUSE ((12) +128)
#define K_ESC ((13) +128)
#define K_ccedilla ((14) +128)
#define K_F1 ((15) +128)
#define K_F2 ((16) +128)
#define K_F3 ((17) +128)
#define K_F4 ((18) +128)
#define K_F5 ((19) +128)
#define K_F6 ((20) +128)
#define K_F7 ((21) +128)
#define K_F8 ((22) +128)
#define K_F9 ((23) +128)
#define K_F10 ((24) +128)
#define K_F11 ((25) +128)
#define K_F12 ((26) +128)
#define K_Print ((27) +128)
#define K_Menu ((28) +128)

#define K_acute ((29) +128)

#define K_sHOME ((((1) +128)) +256)
#define K_sUP ((((2) +128)) +256)
#define K_sPGUP ((((3) +128)) +256)
#define K_sLEFT ((((4) +128)) +256)
#define K_sMIDDLE ((((5) +128)) +256)
#define K_sRIGHT ((((6) +128)) +256)
#define K_sEND ((((7) +128)) +256)
#define K_sDOWN ((((8) +128)) +256)
#define K_sPGDN ((((9) +128)) +256)
#define K_sINS ((((10) +128)) +256)
#define K_sDEL ((((11) +128)) +256)
#define K_sPAUSE ((((12) +128)) +256)
#define K_sESC ((((13) +128)) +256)
#define K_Ccedilla ((((14) +128)) +256)
#define K_sF1 ((((15) +128)) +256)
#define K_sF2 ((((16) +128)) +256)
#define K_sF3 ((((17) +128)) +256)
#define K_sF4 ((((18) +128)) +256)
#define K_sF5 ((((19) +128)) +256)
#define K_sF6 ((((20) +128)) +256)
#define K_sF7 ((((21) +128)) +256)
#define K_sF8 ((((22) +128)) +256)
#define K_sF9 ((((23) +128)) +256)
#define K_sF10 ((((24) +128)) +256)
#define K_sF11 ((((25) +128)) +256)
#define K_sF12 ((((26) +128)) +256)
#define K_sPrint ((((27) +128)) +256)
#define K_sMenu ((((28) +128)) +256)

#define K_cHOME ((((1) +128)) +512)
#define K_cUP ((((2) +128)) +512)
#define K_cPGUP ((((3) +128)) +512)
#define K_cLEFT ((((4) +128)) +512)
#define K_cMIDDLE ((((5) +128)) +512)
#define K_cRIGHT ((((6) +128)) +512)
#define K_cEND ((((7) +128)) +512)
#define K_cDOWN ((((8) +128)) +512)
#define K_cPGDN ((((9) +128)) +512)
#define K_cINS ((((10) +128)) +512)
#define K_cDEL ((((11) +128)) +512)
#define K_cPAUSE ((((12) +128)) +512)
#define K_cESC ((((13) +128)) +512)
#define K_cCcedilla ((((14) +128)) +512)
#define K_cF1 ((((15) +128)) +512)
#define K_cF2 ((((16) +128)) +512)
#define K_cF3 ((((17) +128)) +512)
#define K_cF4 ((((18) +128)) +512)
#define K_cF5 ((((19) +128)) +512)
#define K_cF6 ((((20) +128)) +512)
#define K_cF7 ((((21) +128)) +512)
#define K_cF8 ((((22) +128)) +512)
#define K_cF9 ((((23) +128)) +512)
#define K_cF10 ((((24) +128)) +512)
#define K_cF11 ((((25) +128)) +512)
#define K_cF12 ((((26) +128)) +512)
#define K_cPrint ((((27) +128)) +512)
#define K_cMenu ((((28) +128)) +512)

#define K_mHOME ((((1) +128)) +768)
#define K_mUP ((((2) +128)) +768)
#define K_mPGUP ((((3) +128)) +768)
#define K_mLEFT ((((4) +128)) +768)
#define K_mMIDDLE ((((5) +128)) +768)
#define K_mRIGHT ((((6) +128)) +768)
#define K_mEND ((((7) +128)) +768)
#define K_mDOWN ((((8) +128)) +768)
#define K_mPGDN ((((9) +128)) +768)
#define K_mINS ((((10) +128)) +768)
#define K_mDEL ((((11) +128)) +768)
#define K_mPAUSE ((((12) +128)) +768)
#define K_mESC ((((13) +128)) +768)
#define K_mCcedilla ((((14) +128)) +768)
#define K_mF1 ((((15) +128)) +768)
#define K_mF2 ((((16) +128)) +768)
#define K_mF3 ((((17) +128)) +768)
#define K_mF4 ((((18) +128)) +768)
#define K_mF5 ((((19) +128)) +768)
#define K_mF6 ((((20) +128)) +768)
#define K_mF7 ((((21) +128)) +768)
#define K_mF8 ((((22) +128)) +768)
#define K_mF9 ((((23) +128)) +768)
#define K_mF10 ((((24) +128)) +768)
#define K_mF11 ((((25) +128)) +768)
#define K_mF12 ((((26) +128)) +768)
#define K_mPrint ((((27) +128)) +768)
#define K_mMenu ((((28) +128)) +768)

#define K_yHOME ((((1) +128)) +1024)
#define K_yUP ((((2) +128)) +1024)
#define K_yPGUP ((((3) +128)) +1024)
#define K_yLEFT ((((4) +128)) +1024)
#define K_yMIDDLE ((((5) +128)) +1024)
#define K_yRIGHT ((((6) +128)) +1024)
#define K_yEND ((((7) +128)) +1024)
#define K_yDOWN ((((8) +128)) +1024)
#define K_yPGDN ((((9) +128)) +1024)
#define K_yINS ((((10) +128)) +1024)
#define K_yDEL ((((11) +128)) +1024)
#define K_yPAUSE ((((12) +128)) +1024)
#define K_yESC ((((13) +128)) +1024)
#define K_yCcedilla ((((14) +128)) +1024)
#define K_yF1 ((((15) +128)) +1024)
#define K_yF2 ((((16) +128)) +1024)
#define K_yF3 ((((17) +128)) +1024)
#define K_yF4 ((((18) +128)) +1024)
#define K_yF5 ((((19) +128)) +1024)
#define K_yF6 ((((20) +128)) +1024)
#define K_yF7 ((((21) +128)) +1024)
#define K_yF8 ((((22) +128)) +1024)
#define K_yF9 ((((23) +128)) +1024)
#define K_yF10 ((((24) +128)) +1024)
#define K_yF11 ((((25) +128)) +1024)
#define K_yF12 ((((26) +128)) +1024)
#define K_yPrint ((((27) +128)) +1024)
#define K_yMenu ((((28) +128)) +1024)

#define K_sPlus         IUPsxCODE(K_plus    )
#define K_sComma        IUPsxCODE(K_comma   )
#define K_sMinus        IUPsxCODE(K_minus   )
#define K_sPeriod       IUPsxCODE(K_period  )
#define K_sSlash        IUPsxCODE(K_slash   )
#define K_sAsterisk     IUPsxCODE(K_asterisk)

#define K_cA     IUPcxCODE(K_A)
#define K_cB     IUPcxCODE(K_B)
#define K_cC     IUPcxCODE(K_C)
#define K_cD     IUPcxCODE(K_D)
#define K_cE     IUPcxCODE(K_E)
#define K_cF     IUPcxCODE(K_F)
#define K_cG     IUPcxCODE(K_G)
#define K_cH     IUPcxCODE(K_H)
#define K_cI     IUPcxCODE(K_I)
#define K_cJ     IUPcxCODE(K_J)
#define K_cK     IUPcxCODE(K_K)
#define K_cL     IUPcxCODE(K_L)
#define K_cM     IUPcxCODE(K_M)
#define K_cN     IUPcxCODE(K_N)
#define K_cO     IUPcxCODE(K_O)
#define K_cP     IUPcxCODE(K_P)
#define K_cQ     IUPcxCODE(K_Q)
#define K_cR     IUPcxCODE(K_R)
#define K_cS     IUPcxCODE(K_S)
#define K_cT     IUPcxCODE(K_T)
#define K_cU     IUPcxCODE(K_U)
#define K_cV     IUPcxCODE(K_V)
#define K_cW     IUPcxCODE(K_W)
#define K_cX     IUPcxCODE(K_X)
#define K_cY     IUPcxCODE(K_Y)
#define K_cZ     IUPcxCODE(K_Z)
#define K_c1     IUPcxCODE(K_1)
#define K_c2     IUPcxCODE(K_2)
#define K_c3     IUPcxCODE(K_3)
#define K_c4     IUPcxCODE(K_4)
#define K_c5     IUPcxCODE(K_5)
#define K_c6     IUPcxCODE(K_6)
#define K_c7     IUPcxCODE(K_7)
#define K_c8     IUPcxCODE(K_8)
#define K_c9     IUPcxCODE(K_9)
#define K_c0     IUPcxCODE(K_0)
#define K_cPlus         IUPcxCODE(K_plus        )
#define K_cComma        IUPcxCODE(K_comma       )
#define K_cMinus        IUPcxCODE(K_minus       )
#define K_cPeriod       IUPcxCODE(K_period      )
#define K_cSlash        IUPcxCODE(K_slash       )
#define K_cSemicolon    IUPcxCODE(K_semicolon   )
#define K_cEqual        IUPcxCODE(K_equal       )
#define K_cBracketleft  IUPcxCODE(K_bracketleft )
#define K_cBracketright IUPcxCODE(K_bracketright)
#define K_cBackslash    IUPcxCODE(K_backslash   )
#define K_cAsterisk     IUPcxCODE(K_asterisk    )

#define K_mA     IUPmxCODE(K_A)
#define K_mB     IUPmxCODE(K_B)
#define K_mC     IUPmxCODE(K_C)
#define K_mD     IUPmxCODE(K_D)
#define K_mE     IUPmxCODE(K_E)
#define K_mF     IUPmxCODE(K_F)
#define K_mG     IUPmxCODE(K_G)
#define K_mH     IUPmxCODE(K_H)
#define K_mI     IUPmxCODE(K_I)
#define K_mJ     IUPmxCODE(K_J)
#define K_mK     IUPmxCODE(K_K)
#define K_mL     IUPmxCODE(K_L)
#define K_mM     IUPmxCODE(K_M)
#define K_mN     IUPmxCODE(K_N)
#define K_mO     IUPmxCODE(K_O)
#define K_mP     IUPmxCODE(K_P)
#define K_mQ     IUPmxCODE(K_Q)
#define K_mR     IUPmxCODE(K_R)
#define K_mS     IUPmxCODE(K_S)
#define K_mT     IUPmxCODE(K_T)
#define K_mU     IUPmxCODE(K_U)
#define K_mV     IUPmxCODE(K_V)
#define K_mW     IUPmxCODE(K_W)
#define K_mX     IUPmxCODE(K_X)
#define K_mY     IUPmxCODE(K_Y)
#define K_mZ     IUPmxCODE(K_Z)
#define K_m1     IUPmxCODE(K_1)
#define K_m2     IUPmxCODE(K_2)
#define K_m3     IUPmxCODE(K_3)
#define K_m4     IUPmxCODE(K_4)
#define K_m5     IUPmxCODE(K_5)
#define K_m6     IUPmxCODE(K_6)
#define K_m7     IUPmxCODE(K_7)
#define K_m8     IUPmxCODE(K_8)
#define K_m9     IUPmxCODE(K_9)
#define K_m0     IUPmxCODE(K_0)
#define K_mPlus         IUPmxCODE(K_plus        )
#define K_mComma        IUPmxCODE(K_comma       )
#define K_mMinus        IUPmxCODE(K_minus       )
#define K_mPeriod       IUPmxCODE(K_period      )
#define K_mSlash        IUPmxCODE(K_slash       )
#define K_mSemicolon    IUPmxCODE(K_semicolon   )
#define K_mEqual        IUPmxCODE(K_equal       )
#define K_mBracketleft  IUPmxCODE(K_bracketleft )
#define K_mBracketright IUPmxCODE(K_bracketright)
#define K_mBackslash    IUPmxCODE(K_backslash   )
#define K_mAsterisk     IUPmxCODE(K_asterisk    )

#define K_yA     IUPyxCODE(K_A)
#define K_yB     IUPyxCODE(K_B)
#define K_yC     IUPyxCODE(K_C)
#define K_yD     IUPyxCODE(K_D)
#define K_yE     IUPyxCODE(K_E)
#define K_yF     IUPyxCODE(K_F)
#define K_yG     IUPyxCODE(K_G)
#define K_yH     IUPyxCODE(K_H)
#define K_yI     IUPyxCODE(K_I)
#define K_yJ     IUPyxCODE(K_J)
#define K_yK     IUPyxCODE(K_K)
#define K_yL     IUPyxCODE(K_L)
#define K_yM     IUPyxCODE(K_M)
#define K_yN     IUPyxCODE(K_N)
#define K_yO     IUPyxCODE(K_O)
#define K_yP     IUPyxCODE(K_P)
#define K_yQ     IUPyxCODE(K_Q)
#define K_yR     IUPyxCODE(K_R)
#define K_yS     IUPyxCODE(K_S)
#define K_yT     IUPyxCODE(K_T)
#define K_yU     IUPyxCODE(K_U)
#define K_yV     IUPyxCODE(K_V)
#define K_yW     IUPyxCODE(K_W)
#define K_yX     IUPyxCODE(K_X)
#define K_yY     IUPyxCODE(K_Y)
#define K_yZ     IUPyxCODE(K_Z)
#define K_y1     IUPyxCODE(K_1)
#define K_y2     IUPyxCODE(K_2)
#define K_y3     IUPyxCODE(K_3)
#define K_y4     IUPyxCODE(K_4)
#define K_y5     IUPyxCODE(K_5)
#define K_y6     IUPyxCODE(K_6)
#define K_y7     IUPyxCODE(K_7)
#define K_y8     IUPyxCODE(K_8)
#define K_y9     IUPyxCODE(K_9)
#define K_y0     IUPyxCODE(K_0)
#define K_yPlus         IUPyxCODE(K_plus        )
#define K_yComma        IUPyxCODE(K_comma       )
#define K_yMinus        IUPyxCODE(K_minus       )
#define K_yPeriod       IUPyxCODE(K_period      )
#define K_ySlash        IUPyxCODE(K_slash       )
#define K_ySemicolon    IUPyxCODE(K_semicolon   )
#define K_yEqual        IUPyxCODE(K_equal       )
#define K_yBracketleft  IUPyxCODE(K_bracketleft )
#define K_yBracketright IUPyxCODE(K_bracketright)
#define K_yBackslash    IUPyxCODE(K_backslash   )
#define K_yAsterisk     IUPyxCODE(K_asterisk    )

#endif
